package memento;

import java.io.*;
import java.util.zip.InflaterOutputStream;

/**
 * Serializable 对象的序列化也叫对象的持久化。
 * 把对象01写到磁盘上
 * 如果对象被序列化，其内部所有的引用包括被嵌套的都需要实现 Serializable 接口。
 * 先写谁就先读谁。因为写是按照追加的写的。
 */
class T implements Serializable{
    int i = 0;
    int b = 2;
    // transient 如果属性不想被序列化出去需要拿 transient 修饰。 transient透明的序列化不需要管这个修饰的。
    transient int c = 3;

    @Override
    public String toString() {
        return "T{" +
                "i=" + i +
                ", b=" + b +
                ", c=" + c +
                '}';
    }
}

public class Memento {
    public static void main(String[] args) {
        System.out.println("memento");

        // save 保存
        String PATH = "/Users/yilianhudong/java_design_model_by_msb/src/main/java/memento/T.data";

        File file = new File(PATH);

        try {
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file));
            objectOutputStream.writeObject(new T());
            objectOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 读取
        try {
            ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file));
            T t = (T) objectInputStream.readObject(); // 这个不能读取多次除非上面写了多次而且按照顺序读先写的先度。
            System.out.println(t);
            System.out.println(t.b);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}
